package com.toe.forum.webapi.redisRepository;

import com.toe.pojo.vo.forum.ArticleDetailVO;
import com.toe.pojo.vo.forum.ArticleVO;

import java.util.List;

public interface IArticleRedisRepository {
    /**
     * 文章的前缀
     */
     String KEY_ARTICLE_ITEM_PREFIX = "article:item:";

    /**
     * 文章点赞量的前缀
     */
    String KEY_ARTICLE_Like_PREFIX = "article:like:";

    /**
     * 文章收藏量的前缀
     */
    String KEY_ARTICLE_Enshrine_PREFIX = "article:enshrine:";

    /**
     * 文章浏览量的前缀
     */
    String KEY_ARTICLE_Look_PREFIX = "article:look:";

    /**
     * 向缓存中写入某id对应的空数据(null),此方法主要用于解决缓存穿透问题
     * @param id
     */
    void saveEmptyValue(Long id);

    /**
     * 判断是否存在id对应的缓存数据
     * @param id 类别id
     * @return 存在则返回true，否则返回false
     */
    boolean exists(Long id);

    /**
     * 将文章详情存入到Redis中
     * @param articleVO
     */
    void save (ArticleVO articleVO);

    /**
     * 根据id查询详情
     * @param id
     * @return ArticleDetailVO
     */
    ArticleVO selectArticleById (long id);

    /**
     * 根据id删除文章
     * @param id
     */
    void deleteArticleById(long id);

    /**
     * 保存点赞量
     * @param count
     */
    void saveArticleLike(long articleId,long count);

    /**
     * 根据id查询点赞量
     * @param id
     * @return
     */
    long selectArticleLikeById(Long id);

    /**
     * 根据id删除文章点赞量
     * @param id
     */
    void deleteArticleLikeById(Long id);

    /**
     * 保存点赞量
     * @param count
     */
    void saveArticleEnshrine(long articleId,long count);

    /**
     * 根据id查询收藏量
     * @param id
     * @return
     */
    long selectArticleEnshrineById(Long id);

    /**
     * 根据id删除文章收藏量
     * @param id
     */
    void deleteArticleEnshrineById(Long id);

    /***
     * 保存浏览量
     * @param articleId
     * @param count
     */
    void savaArticleLook(long articleId,long count);

    /**
     * 根据id查询浏览量
     * @param id
     * @return
     */
    long selectArticleLookById(Long id);

    /**
     * 根据id删除文章浏览量
     * @param id
     */
    void deleteArticleLookById(Long id);

    /**
     * 删除所有文章
     */
    void deleteAllItem();
}
